using System;
namespace StarBotDotNet
{
	/// <summary> Contains constant and enumerations values for:
	/// - races
	/// - unit types
	/// - tech types
	/// - upgrade types
	/// - orders
	/// 
	/// To convert back to starcraft names:
	/// 2. replace "___" with "-" (for U-238 shells)
	/// 2. replace "__" with "'"  (for Queen's next)
	/// 3. replace "_" with " "
	/// </summary>
	public sealed class Constants
	{
        public enum Order
        {
            Die,
            Stop,
            Guard,
            PlayerGuard,
            TurretGuard,
            BunkerGuard,
            Move,
            ReaverStop,
            Attack1,
            Attack2,
            AttackUnit,
            AttackFixedRange,
            AttackTile,
            Hover,
            AttackMove,
            InfestMine1,
            Nothing1,
            Powerup1,
            TowerGuard,
            TowerAttack,
            VultureMine,
            StayinRange,
            TurretAttack,
            Nothing2,
            Nothing3,
            DroneStartBuild,
            DroneBuild,
            InfestMine2,
            InfestMine3,
            InfestMine4,
            BuildTerran,
            BuildProtoss1,
            BuildProtoss2,
            ConstructingBuilding,
            Repair1,
            Repair2,
            PlaceAddon,
            BuildAddon,
            Train,
            RallyPoint1,
            RallyPoint2,
            ZergBirth,
            Morph1,
            Morph2,
            BuildSelf1,
            ZergBuildSelf,
            Build5,
            Enternyduscanal,
            BuildSelf2,
            Follow,
            Carrier,
            CarrierIgnore1,
            CarrierStop,
            CarrierAttack1,
            CarrierAttack2,
            CarrierIgnore2,
            CarrierFight,
            HoldPosition1,
            Reaver,
            ReaverAttack1,
            ReaverAttack2,
            ReaverFight,
            ReaverHold,
            TrainFighter,
            StrafeUnit1,
            StrafeUnit2,
            RechargeShields1,
            Rechargeshields2,
            ShieldBattery,
            Return,
            DroneLand,
            BuildingLand,
            BuildingLiftoff,
            DroneLiftoff,
            Liftoff,
            ResearchTech,
            Upgrade,
            Larva,
            SpawningLarva,
            Harvest1,
            Harvest2,
            MoveToGas, // Unit is moving to refinery
            WaitForGas, // Unit is waiting to enter the refinery (another unit is currently in it)
            HarvestGas, // Unit is in refinery
            ReturnGas, // Unit is returning gas to center
            MoveToMinerals, // Unit is moving to mineral patch
            WaitForMinerals, // Unit is waiting to use the mineral patch (another unit is currently mining from it)
            MiningMinerals, // Unit is mining minerals from mineral patch
            Harvest3,
            Harvest4,
            ReturnMinerals, // Unit is returning minerals to center
            Harvest5,
            EnterTransport,
            Pickup1,
            Pickup2,
            Pickup3,
            Pickup4,
            Powerup2,
            SiegeMode,
            TankMode,
            WatchTarget,
            InitCreepGrowth,
            SpreadCreep,
            StoppingCreepGrowth,
            GuardianAspect,
            WarpingArchon,
            CompletingArchonsummon,
            HoldPosition2,
            HoldPosition3,
            Cloak,
            Decloak,
            Unload,
            MoveUnload,
            FireYamatoGun1,
            FireYamatoGun2,
            MagnaPulse,
            Burrow,
            Burrowed,
            Unburrow,
            DarkSwarm,
            CastParasite,
            SummonBroodlings,
            EmpShockwave,
            NukeWait,
            NukeTrain,
            NukeLaunch,
            NukePaint,
            NukeUnit,
            NukeGround,
            NukeTrack,
            InitArbiter,
            CloakNearbyUnits,
            PlaceMine,
            Rightclickaction,
            SapUnit,
            SapLocation,
            HoldPosition4,
            Teleport,
            TeleporttoLocation,
            PlaceScanner,
            Scanner,
            DefensiveMatrix,
            PsiStorm,
            Irradiate,
            Plague,
            Consume,
            Ensnare,
            StasisField,
            Hallucianation1,
            Hallucination2,
            ResetCollision1,
            ResetCollision2,
            Patrol,
            CTFCOPInit,
            CTFCOP1,
            CTFCOP2,
            ComputerAI,
            AtkMoveEP,
            HarassMove,
            AIPatrol,
            GuardPost,
            RescuePassive,
            Neutral,
            ComputerReturn,
            InitPsiProvider,
            SelfDestrucing,
            Critter,
            HiddenGun,
            OpenDoor,
            CloseDoor,
            HideTrap,
            RevealTrap,
            Enabledoodad,
            Disabledoodad,
            Warpin,
            Medic,
            MedicHeal1,
            HealMove,
            MedicHoldPosition,
            MedicHeal2,
            Restoration,
            CastDisruptionWeb,
            CastMindControl,
            WarpingDarkArchon,
            CastFeedback,
            CastOpticalFlare,
            CastMaelstrom,
            JunkYardDog,
            Fatal,
            None,
            Unknown 
		}
		
		public const int NumUnitTypes = 230;
		public const int NumTechTypes = 47;
		public const int NumUpgradeTypes = 63;

        public enum Races
        {
            // Races
            Zerg = 0,
            Terran = 1,
            Protoss = 2,
            Random = 3,
            Other = 4,
            Race_None = 5,
            Race_Unknown = 6
        }
		
		public enum UnitTypes
        {
		 Terran_Marine = 0,
		 Terran_Ghost = 1,
		 Terran_Vulture = 2,
		 Terran_Goliath = 3,
		 Terran_Siege_Tank_Tank_Mode = 5,
		 Terran_SCV = 7,
		 Terran_Wraith = 8,
		 Terran_Science_Vessel = 9,
		 Terran_Dropship = 11,
		 Terran_Battlecruiser = 12,
		 Terran_Vulture_Spider_Mine = 13,
		 Terran_Nuclear_Missile = 14,
		 Terran_Siege_Tank_Siege_Mode = 30,
		 Terran_Medic = 34,
		 Zerg_Larva = 35,
		 Terran_Firebat = 32,
		 Spell_Scanner_Sweep = 33,
		 Zerg_Hydralisk = 38,
		 Zerg_Ultralisk = 39,
		 Zerg_Egg = 36,
		 Zerg_Zergling = 37,
		 Zerg_Overlord = 42,
		 Zerg_Mutalisk = 43,
		 Zerg_Broodling = 40,
		 Zerg_Drone = 41,
		 Zerg_Defiler = 46,
		 Zerg_Scourge = 47,
		 Zerg_Guardian = 44,
		 Zerg_Queen = 45,
		 Zerg_Infested_Terran = 50,
		 Zerg_Cocoon = 59,
		 Terran_Valkyrie = 58,
		 Protoss_Dark_Archon = 63,
		 Zerg_Devourer = 62,
		 Protoss_Dark_Templar = 61,
		 Protoss_Corsair = 60,
		 Protoss_Archon = 68,
		 Protoss_Shuttle = 69,
		 Protoss_Scout = 70,
		 Protoss_Arbiter = 71,
		 Protoss_Probe = 64,
		 Protoss_Zealot = 65,
		 Protoss_Dragoon = 66,
		 Protoss_High_Templar = 67,
		 Protoss_Carrier = 72,
		 Protoss_Interceptor = 73,
		 Protoss_Scarab = 85,
		 Protoss_Observer = 84,
		 Protoss_Reaver = 83,
		 Critter_Scantid = 93,
		 Critter_Ragnasaur = 95,
		 Critter_Kakaru = 94,
		 Critter_Rhynadon = 89,
		 Critter_Bengalaas = 90,
		 Zerg_Lurker = 103,
		 Critter_Ursadon = 96,
		 Zerg_Lurker_Egg = 97,
		 Terran_Refinery = 110,
		 Terran_Barracks = 111,
		 Terran_Nuclear_Silo = 108,
		 Terran_Supply_Depot = 109,
		 Terran_Command_Center = 106,
		 Terran_Comsat_Station = 107,
		 Spell_Disruption_Web = 105,
		 Terran_Physics_Lab = 118,
		 Terran_Covert_Ops = 117,
		 Terran_Science_Facility = 116,
		 Terran_Control_Tower = 115,
		 Terran_Starport = 114,
		 Terran_Factory = 113,
		 Terran_Academy = 112,
		 Special_Ion_Cannon = 127,
		 Special_Crashed_Norad_II = 126,
		 Terran_Bunker = 125,
		 Terran_Missile_Turret = 124,
		 Terran_Armory = 123,
		 Terran_Engineering_Bay = 122,
		 Terran_Machine_Shop = 120,
		 Zerg_Greater_Spire = 137,
		 Zerg_Defiler_Mound = 136,
		 Zerg_Evolution_Chamber = 139,
		 Zerg_Queen__s_Nest = 138,
		 Zerg_Spire = 141,
		 Zerg_Ultralisk_Cavern = 140,
		 Zerg_Creep_Colony = 143,
		 Zerg_Spawning_Pool = 142,
		 Zerg_Hatchery = 131,
		 Zerg_Infested_Command_Center = 130,
		 Zerg_Hive = 133,
		 Zerg_Lair = 132,
		 Zerg_Hydralisk_Den = 135,
		 Zerg_Nydus_Canal = 134,
		 Special_Cerebrate_Daggoth = 152,
		 Protoss_Nexus = 154,
		 Protoss_Robotics_Facility = 155,
		 Protoss_Pylon = 156,
		 Protoss_Assimilator = 157,
		 Protoss_Observatory = 159,
		 Zerg_Spore_Colony = 144,
		 Zerg_Sunken_Colony = 146,
		 Special_Overmind_With_Shell = 147,
		 Special_Overmind = 148,
		 Zerg_Extractor = 149,
		 Special_Mature_Chrysalis = 150,
		 Special_Cerebrate = 151,
		 Protoss_Robotics_Support_Bay = 171,
		 Protoss_Arbiter_Tribunal = 170,
		 Protoss_Fleet_Beacon = 169,
		 Special_Stasis_Cell_Prison = 168,
		 Special_XelNaga_Temple = 175,
		 Special_Protoss_Temple = 174,
		 Special_Khaydarin_Crystal_Form = 173,
		 Protoss_Shield_Battery = 172,
		 Protoss_Citadel_of_Adun = 163,
		 Protoss_Photon_Cannon = 162,
		 Protoss_Gateway = 160,
		 Protoss_Stargate = 167,
		 Protoss_Forge = 166,
		 Protoss_Templar_Archives = 165,
		 Protoss_Cybernetics_Core = 164,
		 Special_Psi_Disrupter = 190,
		 Resource_Vespene_Geyser = 188,
		 Special_Warp_Gate = 189,
		 Resource_Mineral_Field = 176,
		 Special_Overmind_Cocoon = 201,
		 Special_Power_Generator = 200,
		 Spell_Dark_Swarm = 202,
		 Type_Unknown = 229,
		 Type_None = 228,
    }

        public enum TechTypes
        {
            // tech types
            Stim_Packs = 0,
            Lockdown = 1,
            EMP_Shockwave = 2,
            Spider_Mines = 3,
            Scanner_Sweep = 4,
            Tank_Siege_Mode = 5,
            Defensive_Matrix = 6,
            Irradiate = 7,
            Yamato_Gun = 8,
            Cloaking_Field = 9,
            Personnel_Cloaking = 10,
            Burrowing = 11,
            Infestation = 12,
            Spawn_Broodlings = 13,
            Dark_Swarm = 14,
            Plague = 15,
            Consume = 16,
            Ensnare = 17,
            Parasite = 18,
            Psionic_Storm = 19,
            Hallucination = 20,
            Recall = 21,
            Stasis_Field = 22,
            Archon_Warp = 23,
            Restoration = 24,
            Disruption_Web = 25,
            Mind_Control = 27,
            Dark_Archon_Meld = 28,
            Feedback = 29,
            Optical_Flare = 30,
            Maelstrom = 31,
            Lurker_Aspect = 32,
            Healing = 34,
            Tech_None = 44,
            Tech_Unknown = 45,
            Nuclear_Strike = 46
        }

        public enum UpgradeTypes
        {
            // upgrade types
            Terran_Infantry_Armor = 0,
            Terran_Vehicle_Plating = 1,
            Terran_Ship_Plating = 2,
            Zerg_Carapace = 3,
            Zerg_Flyer_Carapace = 4,
            Protoss_Armor = 5,
            Protoss_Plating = 6,
            Terran_Infantry_Weapons = 7,
            Terran_Vehicle_Weapons = 8,
            Terran_Ship_Weapons = 9,
            Zerg_Melee_Attacks = 10,
            Zerg_Missile_Attacks = 11,
            Zerg_Flyer_Attacks = 12,
            Protoss_Ground_Weapons = 13,
            Protoss_Air_Weapons = 14,
            Protoss_Plasma_Shields = 15,
            U___238_Shells = 16,
            Ion_Thrusters = 17,
            Titan_Reactor = 19,
            Ocular_Implants = 20,
            Moebius_Reactor = 21,
            Apollo_Reactor = 22,
            Colossus_Reactor = 23,
            Ventral_Sacs = 24,
            Antennae = 25,
            Pneumatized_Carapace = 26,
            Metabolic_Boost = 27,
            Adrenal_Glands = 28,
            Muscular_Augments = 29,
            Grooved_Spines = 30,
            Gamete_Meiosis = 31,
            Metasynaptic_Node = 32,
            Singularity_Charge = 33,
            Leg_Enhancements = 34,
            Scarab_Damage = 35,
            Reaver_Capacity = 36,
            Gravitic_Drive = 37,
            Sensor_Array = 38,
            Gravitic_Boosters = 39,
            Khaydarin_Amulet = 40,
            Apial_Sensors = 41,
            Gravitic_Thrusters = 42,
            Carrier_Capacity = 43,
            Khaydarin_Core = 44,
            Argus_Jewel = 47,
            Argus_Talisman = 49,
            Caduceus_Reactor = 51,
            Chitinous_Plating = 52,
            Anabolic_Synthesis = 53,
            Charon_Booster = 54,
            Upgrade_None = 61,
            Upgrade_Unknown = 62,
        }
	}
}